package InputStream;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.Scanner;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 石方旭
 * Date: 2022-09-29
 * Time: 21:25
 */
public class FileInputStreamTest1 {
    /*
    InputStream 是抽象类,如果要使用需要实现具体的类
    文件 : FileInputStream 是文件输入流,是将磁盘中的数据写入到java程序里面
    */

    //使用read方法一个一个读取
    //从该输入流读取一个字节的数据.如果没有输入可用，此方法将阻止
    public static void FileInputStream1(){
        //写到try里面自动释放资源
        try(FileInputStream fileInputStream = new FileInputStream("e://test2.txt")){
            //使用read是读取一个字节,读到结尾返回-1
            while(true){
                int readData = fileInputStream.read();
                if(readData==-1){
                    break;
                }
                System.out.printf("%c",readData);
            }
        }  catch (IOException e) {
            e.printStackTrace();
        }
    }

    //使用read(byte[]) 一次可以读取一个字节数组长度的大小
    //从该输入流读取最多b.length字节的数据到字节数组.此方法将阻塞，直到某些输入可用。
    //读入缓冲区的总字节数，如果没有更多的数据，因为文件的结尾已经到达.-1.
    public static void FileInputStream2(){
        try(FileInputStream fileInputStream = new FileInputStream("e://test2.txt")){
             byte[] buffer = new byte[1024];
             int len = 0;
             while(true){
                 len = fileInputStream.read(buffer);
                 if(len == -1){
                     break;
                 }
                 for(int i =0;i<len;++i){
                     System.out.printf("%c",buffer[i]);
                 }
             }

        } catch(IOException e){
            e.printStackTrace();
        }
    }
    /*
      从该输入流读取高达len字节的数据到字节数组。 如果len不为零，则该方法将阻塞，直到某些输入可用;
      否则，不会读取字节，并返回0.该方法简单地执行in.read(b, off, len)并返回结果。
     */
    //read(b, off, len)
    public static void FileInputStream3(){
        try(FileInputStream fileInputStream = new FileInputStream("e://test2.txt")){
            byte[] buffer = new byte[1024];
            int len = 0;
            while(true){
                len = fileInputStream.read(buffer,0,3);
                if(len == -1){
                    break;
                }
                for(int i =0;i<len;++i){
                    System.out.printf("%c",buffer[i]);
                }
            }

        } catch(IOException e){
            e.printStackTrace();
        }
    }

    //构造成字符串--读取汉字
    public static void FileInputStream4(){
        try(FileInputStream fileInputStream = new FileInputStream("e://test2.txt")){
            byte[] buffer = new byte[1024];
            int len = 0;
            while(true){
                len = fileInputStream.read(buffer);
                if(len == -1){
                    break;
                }
                String str = new String(buffer,0,len);
                System.out.println(str);
            }

        } catch(IOException e){
            e.printStackTrace();
        }
    }

    //使用Scanner
    public static void FileInputStreamScanner(){
        try(FileInputStream fileInputStream = new FileInputStream("e://test2.txt")){
            try(Scanner scan = new Scanner(fileInputStream)){
                while(scan.hasNext()){
                    String s = scan.next();
                    System.out.println(s);
                }
            }

        }catch(IOException e){
            e.printStackTrace();
        }
    }
    public static void main(String[] args) {
//        FileInputStream1();
//        System.out.println();
//        FileInputStream2();
//        System.out.println();
//        FileInputStream3();
          FileInputStream4();
          System.out.println();
          FileInputStreamScanner();
    }





}
